package cz.vse.adventura.po1715.xforv00_forejt;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;
import cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;
import cz.pecinovsky.english.pojj.adv_framework.scenario.AScenarioManager;
import cz.pecinovsky.english.pojj.adv_framework.scenario.ScenarioStep;
import cz.pecinovsky.english.pojj.adv_framework.scenario.TypeOfScenario;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_115;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_101;
import cz.vse.adventura.po1715.xforv00_forejt.hra.Hra;
import static cz.pecinovsky.english.pojj.adv_framework.scenario.TypeOfStep.*;



/*******************************************************************************
 * Instance třída {@code SprávceScénářůL} slouží jako správce scénářů,
 * které mají prověřit a/nebo demonstrovat správnou funkci plánované hry.
 * Jednotlive scénáře jsou iterovatelné posloupností kroků specifikovaných
 * instancemi třídy <code>ScenarioStep</code> z rámce, do nějž se hra začleňuje.
 * <p>
 * Správce scénářů je jedináček, který má na starosti všechny scénáře
 * týkající se s ním sdružené hry.
 *
 * @author Vladimír Forejt
 * @version 1.00,  22.11.2010
 */
public class SprávceScénářůL extends AScenarioManager
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Třída, jejíž instance jsou zde spravovány. */
    private final static Class<? extends IGameG> TŘÍDA = Hra.class;

    /** Jmeno autora/autorky třídy. */
    private static final String autor = "FOREJT Vladimír";

    /** X-name autora/autorky třídy. */
    private static final String xname = "XFORV00";


    /***************************************************************************
     * Konstruktor plnohodnotné instance třídy {@link ScenarioStep}
     * vyžaduje následující parametry:
     *      String   příkaz;    //Příkaz realizující tetno krok scénáře
     *      String   zpráva;    //Zpráva vypsaná po zadání příkazu
     *      String   prostor;   //Prostor, v něž skončí hráč po zadání příkazu
     *      String[] východy;   //Aktuální východy z aktuálního prostoru
     *      String[] objekty;   //Objekty vyskytující se v daném prostoru
     *      String[] batoh;     //Aktuální obsah batohu
     *      TypKroku typTestu;  //Typ daného kroku testu
     */


    /***************************************************************************
     * Základní scénář popisující možný úspěšný průběh hry.
     */
   private static final ScenarioStep[] základní =
    {

      new ScenarioStep( "", //Název prvního příkazu musí být prázdný řetězec
            "Rozhodl(a) jste se jet na dovolenou do Indie." +
            "\nK tomu ale potřebujete získat vízum na indickém velvyslanectví." +
            "\nPřeji hodně štěstí, snad se vám to podaří." +
            "\n Jste doma ve svém pokoji, na stole leží nějaké papíry a peníze." +
            "\nPro nápovědu zadejte příkaz \"?\" " +
            "\n------------------------------------------" + 
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsSTART ),

        new ScenarioStep( "otevři skříňka",
            "Otevřel(a) jste skříňku" +
            "\nNacházíte se v: Skříňka" +
            "\nMůžete se přesunout do: "+
            "\nV místnosti se nachází: Pas" +
            "\nMáte v držení předměty: ",

            "Skříňka",
            new String[] {  },
            new String[] { "Pas" },
            new String[] {     },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi pas",
            "Vzal(a) jste předmět: Pas" +
            "\nNacházíte se v: Skříňka" +
            "\nMůžete se přesunout do: "+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Pas",

            "Skříňka",
            new String[] {  },
            new String[] {  },
            new String[] {  "Pas"   },
            tsPICK_UP ),

        new ScenarioStep( "zavři skříňka",
            "Skříňku jste za sebou zase zavřel." +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Stovka, Dvoustovka, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] {  "Pas"   },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi stovka",
            "Vzal(a) jste předmět: Stovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Dvoustovka, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Dvoustovka", "Dvoustovka", "Skříňka" },
            new String[] {  "Stovka", "Pas"   },
            tsPICK_UP ),

        new ScenarioStep( "vezmi dvoustovka",
            "Vzal(a) jste předmět: Dvoustovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka, Dvoustovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Dvoustovka", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka"   },
            tsPICK_UP ),

       new ScenarioStep( "vezmi dvoustovka",
            "Vzal(a) jste předmět: Dvoustovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka, Dvoustovka, Dvoustovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka", "Dvoustovka"   },
            tsPICK_UP ),


        new ScenarioStep( "vezmi papír",
            "Vzal(a) jste předmět: Papír" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Skříňka" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka", "Dvoustovka", "Papír"   },
            tsPICK_UP ),

        new ScenarioStep( "přečti papír",
            "Čtete si svou poznámku na papíře:" +
            "\nEmbassy of India" +
            "\nMilady Horákové 60/93" +
            "\nPraha 7 Holešovice" +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Skříňka" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Skříňka" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsNON_STANDARD ),

        new ScenarioStep( "jdi Ulice_Dlouhá",
            "Přesunul(a) jste se do: Ulice_Dlouhá" +
            "\n\nNacházíte se v: Ulice_Dlouhá" +
            "\nMůžete se přesunout do: Doma, Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Odpadkový koš" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ulice_Dlouhá",
            new String[] { "Doma", "Ulice_Milady_Horákové" },
            new String[] { "Odpadkový koš" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka",  "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "jdi Ulice_Milady_Horákové",
            "Přesunul(a) jste se do: Ulice_Milady_Horákové" +
            "\n\nNacházíte se v: Ulice_Milady_Horákové" +
            "\nMůžete se přesunout do: Ambasáda, Fotokino, Ulice_Dlouhá"+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ulice_Milady_Horákové",
            new String[] { "Ambasáda", "Fotokino", "Ulice_Dlouhá" },
            new String[] {  },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "jdi ambasáda",
            "Přesunul(a) jste se do: Ambasáda" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "mluv úředník",
            "\n\nÚředník: Co byste potřeboval(a)?",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsNON_STANDARD ),

        new ScenarioStep( "vízum",
            "Musíte si vyplnit tuhle žádost." +
            "\nPak ji přineste spolu s cestovním pasem a průkazovou fotografií." +
            "\nCena za vízum je 400,-" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Žádost" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Žádost" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsDIALOG ),

        new ScenarioStep( "vezmi žádost",
            "Zadaný předmět nemůžete sebrat. Máte už plné kapsy." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Žádost" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Žádost" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsBAG_FULL ),

        new ScenarioStep( "polož papír",
            "Položil(a) jste předmět: Papír" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Žádost, Papír" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Žádost", "Papír" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas"   },
            tsPUT_DOWN ),

        new ScenarioStep( "vezmi žádost",
            "Vzal(a) jste předmět: Žádost"  +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Papír" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Žádost",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Papír" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Žádost"    },
            tsPICK_UP ),

        new ScenarioStep( "jdi Ulice_Milady_Horákové",
            "Přesunul(a) jste se do: Ulice_Milady_Horákové" +
            "\n\nNacházíte se v: Ulice_Milady_Horákové" +
            "\nMůžete se přesunout do: Ambasáda, Fotokino, Ulice_Dlouhá"+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Žádost",

            "Ulice_Milady_Horákové",
            new String[] { "Ambasáda", "Fotokino", "Ulice_Dlouhá" },
            new String[] {  },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Žádost"    },
            tsMOVE ),

        new ScenarioStep( "jdi fotokino",
            "Přesunul(a) jste se do: Fotokino" +
            "\nNacházíte se v: Fotokino" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Prodavačka, Stůl" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Žádost",

            "Fotokino",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Prodavačka", "Stůl" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka",  "Pas", "Žádost"   },
            tsMOVE ),

        new ScenarioStep( "mluv prodavačka",
            "Prodavačka: Co byste potřeboval(a)?",

            "Fotokino",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Prodavačka", "Stůl" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka",  "Pas", "Žádost"   },
            tsNON_STANDARD ),

        new ScenarioStep( "fotografie",
            "Tak řekněte sýýýr" +
            "\n Pasová fotografie.. Bude to 100Kč",

            "Fotokino",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Prodavačka", "Stůl" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka",  "Pas", "Žádost"   },
            tsDIALOG ),

        new ScenarioStep( "podej prodavačka stovka",
            "Podal(a) jste postavě Prodavačka předmět Stovka. " +
            "Prodavačka položila na stůl fotografie." +
            "\nNacházíte se v: Fotokino" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Prodavačka, Stůl, Fotografie" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost",

            "Fotokino",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Prodavačka", "Stůl", "Fotografie" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Žádost"   },
            tsNON_STANDARD ),

        new ScenarioStep("vezmi fotografie",
            "Vzal(a) jste předmět: Fotografie"  +
            "\nNacházíte se v: Fotokino" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Prodavačka, Stůl" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost, Fotografie",

            "Fotokino",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Prodavačka", "Stůl" },
            new String[] { "Dvoustovka", "Dvoustovka",  "Pas", "Žádost", "Fotografie"   },
            tsPICK_UP ),

        new ScenarioStep( "jdi Ulice_Milady_Horákové",
            "Přesunul(a) jste se do: Ulice_Milady_Horákové" +
            "\n\nNacházíte se v: Ulice_Milady_Horákové" +
            "\nMůžete se přesunout do: Ambasáda, Fotokino, Ulice_Dlouhá"+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost, Fotografie",

            "Ulice_Milady_Horákové",
            new String[] { "Ambasáda", "Fotokino", "Ulice_Dlouhá" },
            new String[] { },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Žádost", "Fotografie"   },
            tsMOVE ),

        new ScenarioStep( "jdi ambasáda",
            "Přesunul(a) jste se do: Ambasáda" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Papír" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost, Fotografie",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Papír" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Žádost", "Fotografie"   },
            tsMOVE ),

        new ScenarioStep( "polož fotografie",
            "Položil(a) jste předmět: Fotografie" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle, Papír, Fotografie" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle", "Papír", "Fotografie" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Žádost"   },
            tsPUT_DOWN ),

        new ScenarioStep( "vezmi tužka",
            "Vzal(a) jste předmět: Tužka" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Fotografie" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Žádost, Tužka",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír", "Fotografie" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Žádost",  "Tužka"   },
            tsPICK_UP),

        new ScenarioStep( "vyplň tužka žádost",
            "Vyplnil(a) jste údaje do žádosti o vízum. Můžete ji podat." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Fotografie" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas," +
                                        " VyplněnáŽádost, Tužka",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Fotografie", "Papír", "Židle" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas",
                            "VyplněnáŽádost",  "Tužka"  },
            tsNON_STANDARD ),

        new ScenarioStep( "polož tužka",
            "Položil(a) jste předmět: Tužka" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Fotografie, Tužka" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas," +
                                        " Papír, VyplněnáŽádost",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Fotografie", "Papír", "Židle",  "Tužka" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas",
                            "VyplněnáŽádost" },
            tsPUT_DOWN ),

        new ScenarioStep( "vezmi fotografie",
            "Vzal(a) jste předmět: Fotografie" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, " +
                                        "Fotografie, VyplněnáŽádost",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Papír", "Židle",  "Tužka" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas",
                             "VyplněnáŽádost", "Fotografie"  },
            tsPICK_UP ),

        new ScenarioStep( "podej úředník VyplněnáŽádost",
            "Podal(a) jste postavě úředník předmět VyplněnáŽádost." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka" +
            "\nMáte v držení předměty: Dvoustovka, Dvoustovka, Pas, Fotografie",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír", "Tužka" },
            new String[] {  "Dvoustovka", "Dvoustovka",  "Pas", "Fotografie"   },
            tsNON_STANDARD),

        new ScenarioStep( "podej úředník dvoustovka",
            "Podal(a) jste postavě úředník předmět Dvoustovka." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka" +
            "\nMáte v držení předměty: Dvoustovka, Pas, Fotografie",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír",  "Tužka" },
            new String[] { "Dvoustovka",  "Pas", "Fotografie"   },
            tsNON_STANDARD),

        new ScenarioStep( "podej úředník dvoustovka",
            "Podal(a) jste postavě úředník předmět Dvoustovka." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka" +
            "\nMáte v držení předměty: Pas, Fotografie",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír",  "Tužka" },
            new String[] { "Pas", "Fotografie" },
            tsNON_STANDARD),

        new ScenarioStep( "podej úředník pas",
            "Podal(a) jste postavě úředník předmět Pas." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka" +
            "\nMáte v držení předměty: Fotografie",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír" ,  "Tužka"},
            new String[] { "Fotografie"  },
            tsNON_STANDARD),

        new ScenarioStep( "podej úředník fotografie",
            "Podal(a) jste postavě úředník předmět Fotografie. " +
            "Úředník: Děkuji. Odpoledne to bude hotové." +
            "\nVracíte se za několik hodin a úředník vám podává váš pas s vízem." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Papír, Tužka, Pas_s_vízem" +
            "\nMáte v držení předměty: ",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír", "Pas_s_vízem",  "Tužka" },
            new String[] {  },
            tsNON_STANDARD),

        new ScenarioStep( "vezmi pas_s_vízem",
            "Vzal(a) jste předmět: Pas_s_vízem" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Židle, Tužka, Papír" +
            "\nMáte v držení předměty: Pas_s_vízem",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír",  "Tužka" },
            new String[] {  "Pas_s_vízem"  },
            tsPICK_UP),

        new ScenarioStep( "konec",
            "Konec hry. Šťastnou cestu.",
            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Židle", "Papír",  "Tužka" },
            new String[] {  "Pas_s_vízem"   },
            tsEND )
        //V úspěsném scénáři nemusí být typ posledního příkazu KONEC
        //Hra může končit i prostým dosažením požadovaného cíle
    };


    /***************************************************************************
     * Základní chybový scénář definující reakce
     * na povinnou sadu chybových stavů.
     */
    private static final ScenarioStep[] chybový =
    {
        new ScenarioStep( "", //Název prvního příkazu musí být prázdný řetězec
            "Rozhodl(a) jste se jet na dovolenou do Indie." +
            "\nK tomu ale potřebujete získat vízum na indickém velvyslanectví." +
            "\nPřeji hodně štěstí, snad se vám to podaří." +
            "\n Jste doma ve svém pokoji, na stole leží nějaké papíry a peníze." +
            "\nPro nápovědu zadejte příkaz \"?\" " +
            "\n------------------------------------------" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsSTART ),

        new ScenarioStep( "stůl",
            "Tento příkaz neznám." +
          "\nPro nápovědu zadejte příkaz ?" +
        "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsUNKNOWN ),

        new ScenarioStep( "",
            "Zadal(a) jste prázdný příkaz." +
            "\nPro nápovědu zadejte příkaz ?" +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsEMPTY ),

        new ScenarioStep( "jdi obývák",
            "Odtud do zadané místnosti nemůžete." +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsBAD_NEIGHBOR ),

        new ScenarioStep( "vezmi pas",
            "Zadaný předmět se v místnosti nevyskytuje." +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsBAD_OBJECT ),

        new ScenarioStep( "vezmi stůl",
            "Zadaný předmět neuzvednete." +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsUNMOVABLE ),

        new ScenarioStep( "polož stovka",
            "Zadaný předmět nemáte u sebe" +
            "\n\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsNOT_IN_BAG ),

        new ScenarioStep( "otevři skříňka",
            "Otevřel(a) jste skříňku" +
            "\nNacházíte se v: Skříňka" +
            "\nMůžete se přesunout do: "+
            "\nV místnosti se nachází: Pas" +
            "\nMáte v držení předměty: ",

            "Skříňka",
            new String[] {  },
            new String[] { "Pas" },
            new String[] {     },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi pas",
            "Vzal(a) jste předmět: Pas" +
            "\nNacházíte se v: Skříňka" +
            "\nMůžete se přesunout do: "+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Pas",

            "Skříňka",
            new String[] {  },
            new String[] {  },
            new String[] {  "Pas"   },
            tsPICK_UP ),

        new ScenarioStep( "zavři skříňka",
            "Skříňku jste za sebou zase zavřel." +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, , Stovka, Dvoustovka, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] {  "Pas"   },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi stovka",
            "Vzal(a) jste předmět: Stovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Dvoustovka, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Dvoustovka", "Dvoustovka", "Skříňka" },
            new String[] {  "Stovka", "Pas"   },
            tsPICK_UP ),

        new ScenarioStep( "vezmi dvoustovka",
            "Vzal(a) jste předmět: Dvoustovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Dvoustovka, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka, Dvoustovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Dvoustovka", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka"   },
            tsPICK_UP ),

       new ScenarioStep( "vezmi dvoustovka",
            "Vzal(a) jste předmět: Dvoustovka" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Papír, Skříňka" +
            "\nMáte v držení předměty: Pas, Stovka, Dvoustovka, Dvoustovka",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Papír", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka", "Dvoustovka"   },
            tsPICK_UP ),


        new ScenarioStep( "vezmi papír",
            "Vzal(a) jste předmět: Papír" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Skříňka" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Skříňka" },
            new String[] {  "Pas", "Stovka", "Dvoustovka", "Dvoustovka", "Papír"   },
            tsPICK_UP ),
       new ScenarioStep( "jdi Ulice_Dlouhá",
            "Přesunul(a) jste se do: Ulice_Dlouhá" +
            "\n\nNacházíte se v: Ulice_Dlouhá" +
            "\nMůžete se přesunout do: Doma, Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Odpadkový koš" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ulice_Dlouhá",
            new String[] { "Doma", "Ulice_Milady_Horákové" },
            new String[] { "Odpadkový koš" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka",  "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "jdi Ulice_Milady_Horákové",
            "Přesunul(a) jste se do: Ulice_Milady_Horákové" +
            "\n\nNacházíte se v: Ulice_Milady_Horákové" +
            "\nMůžete se přesunout do: Ambasáda, Fotokino, Ulice_Dlouhá"+
            "\nV místnosti se nachází: " +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ulice_Milady_Horákové",
            new String[] { "Ambasáda", "Fotokino", "Ulice_Dlouhá" },
            new String[] {  },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "jdi ambasáda",
            "Přesunul(a) jste se do: Ambasáda" +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle" },
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsMOVE ),

        new ScenarioStep( "vezmi tužka",
            "Zadaný předmět nemůžete sebrat. Máte už plné kapsy." +
            "\n\nNacházíte se v: Ambasáda" +
            "\nMůžete se přesunout do: Ulice_Milady_Horákové"+
            "\nV místnosti se nachází: Úředník, Tužka, Židle" +
            "\nMáte v držení předměty: Stovka, Dvoustovka, Dvoustovka, Pas, Papír",

            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle"},
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsBAG_FULL ),

        new ScenarioStep("?",
            "Nápověda\n" +
            "\n============================================",
            //Text pokračuje vyjmenováním příkazů a jejich popisů
            //a končí standardním popisem aktuální situace

             "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle"},
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír"   },
            tsHELP ),

        new ScenarioStep( "konec",
            "Konec hry. Šťastnou cestu.",
            
            "Ambasáda",
            new String[] { "Ulice_Milady_Horákové" },
            new String[] { "Úředník", "Tužka", "Židle"},
            new String[] {  "Stovka", "Dvoustovka", "Dvoustovka", "Pas", "Papír" },
            tsEND )
    };

    /***************************************************************************
     * Základní chybový scénář definující reakce
     * na povinnou sadu chybových stavů.
     */
    private static final ScenarioStep[] obecný =
    {
        new ScenarioStep( "", //Název prvního příkazu musí být prázdný řetězec
            "Rozhodl(a) jste se jet na dovolenou do Indie." +
            "\nK tomu ale potřebujete získat vízum na indickém velvyslanectví." +
            "\nPřeji hodně štěstí, snad se vám to podaří." +
            "\n Jste doma ve svém pokoji, na stole leží nějaké papíry a peníze." +
            "\nPro nápovědu zadejte příkaz \"?\" " +
            "\n------------------------------------------" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: ",

            "Doma",
            new String[] { "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { },
            tsSTART ),

        new ScenarioStep( "kouzlo abraka",
            "Vykouzlili jste si kouzelnou místnost. " +
                  "Můžete do ní přejít a ukončit hru." +
            "\n------------------------------------------" +
            "\nNacházíte se v: Doma" +
            "\nMůžete se přesunout do: Finální, Ulice_Dlouhá"+
            "\nV místnosti se nachází: Stůl, Stovka, Dvoustovka, " +
                                            "Dvoustovka, Papír, Skříňka" +
            "\nMáte v držení předměty: Pas_s_vízem",

            "Doma",
            new String[] { "Finální", "Ulice_Dlouhá" },
            new String[] { "Stůl", "Stovka", "Dvoustovka",
                                "Dvoustovka", "Papír", "Skříňka" },
            new String[] { "Pas_s_vízem" },
            tsNON_STANDARD ),

        new ScenarioStep( "jdi finální",
            "Přesunul(a) jste se do: Finální" +
            "\n\nNacházíte se v: Finální" +
            "\nMůžete se přesunout do: Doma"+
            "\nV místnosti se nachází:" +
            "\nMáte v držení předměty: Pas_s_vízem",

            "Finální",
            new String[] { "Doma" },
            new String[] { },
            new String[] {  "Pas_s_vízem"  },
            tsMOVE ),

        new ScenarioStep( "konec",
            "Konec hry. Šťastnou cestu.",

            "Finální",
            new String[] { "Doma" },
            new String[] { },
            new String[] {  "Pas_s_vízem" },
            tsEND )
    };

    /** Jediná instance této třídy. Spravuje všechny scénáře sdružené hry. */
    private static final SprávceScénářůL SS = new SprávceScénářůL();
    


//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================

    

//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vrátí správce scénářů - jedinou instanci této třídy.
     *
     * @return Správce scénářů
     */
    public static SprávceScénářůL getInstance()
    {
        return SS;
    }


    /***************************************************************************
     * Vytvoří instanci představující správce scénářů hry.
     */
    public SprávceScénářůL()
    {
        super(autor, xname, TŘÍDA);
        přidejScénáře();
        seal();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přidá správci všechny vytvořené scénáře.
     */
   private void přidejScénáře()
    {
        addScenario("Základní", TypeOfScenario.scHAPPY, základní);
        addScenario("Chybový",  TypeOfScenario.scMISTAKES, chybový);
        //addScenario("Obhajoba", TypeOfScenario.scGENERAL, obecný);
        addScenario("Demo for Gui", new String[] {"",       //první příkaz prázdný
                                                  "vezmi dvoustovka",
                                                  "otevři skříňka",
                                                  "vezmi pas",
                                                  "zavři skříňka",
                                                  
                                                  "jdi ulice_dlouhá",
                                                  "polož dvoustovka",
                                                  "polož pas",
                                                  "jdi ulice_milady_horákové",
                                                  "konec",

        });
        seal();
    }



//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================

//  Staré testy

//    /***************************************************************************
//     * Základní test ověřující, jestli správce scénářů vyhovuje
//     * zadným okrajovým podmínkám.
//     */
//    public static void test()
//    {
//        _TestSprávceScénářů test = new _TestSprávceScénářů();
//        test.testuj(SS);
//    }
//
//
//    /***************************************************************************
//     * Simulace průběhu hry podle základního úspěšného scénáře.
//     */
//    public static void simulujÚspěšný()
//    {
//        _SpouštěníScénářů.simulujStručně (SS.getScenario(0));
//    }
//
//
//    /***************************************************************************
//     * Simulace průběhu hry podle základního chybového scénáře.
//     */
//    public static void simulujChybový()
//    {
//        _SpouštěníScénářů .simulujStručně (SS.getScenario(1));
//    }
//
//
//    /***************************************************************************
//     * Testování funkce hry prováděné postupně
//     * prostřednictvím všech scénářů daného správce
//     */
//    public static void prověrkaHry()
//    {
//        IGameG hra = Hra.getHra();
//        _SpouštěníScénářů .proveďScénáře(hra);
//    }
//
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )
//    {
//        //test();
//        //simulujÚspěšný();
//        //simulujChybový();
//        prověrkaHry();
//    }
//


    /***************************************************************************
     * Základní test ověřující, jestli správce scénářů vyhovuje
     * zadným okrajovým podmínkám.
     */
    public static void testSprávceScénářů()
    {
        _Test_101 test = _Test_101.getInstance(SS);
        test.testScenarioManager();
    }


    /***************************************************************************
     * Testování funkce hry prováděné postupně
     * prostřednictvím všech scénářů daného správce
     */
    public static void prověrkaHry()
    {
        IGame     hra  = SS.getGame();
        _Test_101 test = _Test_101.getInstance(hra);
        test.testGame();
    }


    /***************************************************************************
     * Test ověřujícífunkci textové verze hry.
     */
    public static void testTXT()
    {
        IGame     hra  = SS.getGame();
        _Test_101 test = _Test_101.getInstance(hra);
        test.playGameByScenario(INDEX_GUI_TEST);
    }


    /***************************************************************************
     * Test demonstrující hraní hry na daném GUI.
     */
    public static void testGUI()
    {
        IGameG    hra  = (IGameG)SS.getGame();
        _Test_115 test = _Test_115.getInstance(hra);
        test.playGameByScenario(INDEX_GUI_TEST);
    }


    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )
    {
        testTXT();
    }

    
}
